# 频数统计函数：专门用来分组，分组之后才能进行的统计方式
head(mtcars)
cylfactors <- as.factor(mtcars$cyl)
# install.packages('dplyr')
myvars <- mtcars[c('mpg','hp','wt','am')]
myvars <- dplyr:: mutate(myvars, cylfactorsl=cylfactors)
split(myvars, myvars$cylfactorsl)
table(myvars$cylfactorsl)
# seq(from=,to=,by=组距)
table(cut(myvars$mpg, c(seq(10,50,10))))
# 频数除以总数就是频率值
prop.table(table(myvars$cylfactorsl))
# 二维数据框统计频数
head(Arthritis)
table(Arthritis$Treatment, Arthritis$Improved)
# 变量多的时候可以用with(), attach()方式
with(data = Arthritis, table(Treatment, Improved))
# xtabs()函数处理二维列联表，好处是用选项参数formula参数，根据需要写出多种公式
x <- xtabs(~Treatment+Improved, data = Arthritis)
# 边际频数:单独按照行或列的数据进行处理,
# 第二个参数1代表行，2代表列，如果没有则返回所有的结果
x
margin.table(x)
margin.table(x,1)
margin.table(x,2)
# 比例频数（边际频率）
prop.table(x,1)
# addmargins()可以直接将边际的和添加到频数表中
addmargins(x)
addmargins(x,1)
addmargins(x,2)
# 三维列联表,xtabs()添加一个参数，ftable()平铺式的列表
y <- xtabs(~Treatment+Improved+Sex, data= Arthritis)
ftable(y)


# 独立性检验函数
# 独立性检验：根据频数信息判断两类因子彼此相关或相互独立的假设性检验，所谓独立性是指变量之间是独立的，没有关系
# 根据分组计算的频数表进行独立性检验
# 卡方检验、Fisher检验、cochan-mantel-haenszel检验
# 假设检验：根据问题的需要对所研究的总体做某种假设，记作H0;选取合适的统计量，这个统计量的选取要使得在假设H0成立时，
#           其分布为已知；由实测的样本，计算出统计量的值， 并根据预先给定的显著性水平进行检验，作出拒绝或接受假设H0
#           的判断
# p-value,通过计算得到的概率值。p < 0.05时，拒绝原假设（也就是假设成立），p > 0.05时不拒绝原假设
# 探究药物治疗是否有效果。检验treatment和improved是不是相互独立的，如果相互独立，则二者没有关系，说明药物治疗没有效果
# 反之就是有效果

#卡方检验
mytable <- table(Arthritis$Treatment, Arthritis$Improved)
# p-value < 0.05 表明两者之间有关系，不是独立的，治疗是有效果的
chisq.test(mytable)
mytable1 <- table(Arthritis$Improved, Arthritis$Treatment)
chisq.test(mytable1)
# Fisher精确检验：原假设：边界固定的列联表中行和列相互独立；适合小样本的检验，精度低于卡方检验
mytable <- xtabs(~Treatment+Improved, data = Arthritis)
fisher.test(mytable)
# cochan-mantel-haenszel检验：原假设：两个名义变量在第三个变量的每一层中都是条件独立的。这个检验需要三个变量，
mytable <- xtabs(~Treatment+Improved+Sex, data = Arthritis)
# p<0.05表示药物治疗和改善情况在性别的每一个水平上不独立
mantelhaen.test(mytable)
# 如果调整顺序，反应的结果是有差别的
mytable <- xtabs(~Treatment+Sex+Improved, data = Arthritis)
mantelhaen.test(mytable)

# 相关性分析函数：指对两个或多个具备相关性的变量元素进行分析，从而衡量两个变量因素的相关密切程度。
# 相关性元素之间需要存在一定的联系或者概率才可以进行相关性分析，简单来说就是变量之间是否有关系
# 相关性分析之前需要先进行独立检测之后才能进行相关性分析
# 相关系数的大小表示相关性的大小，相关系数包括：pearson相关系数，spearman相关系数、kendall相关系数偏相关系数、多分格相关系数
# cor()函数计算相关性系数，包括pearson相关系数、spearman相关系数和Kendall相关系数。

# 相关数据都在[-1,1]之间，数值越大相关性越大，正负号表示是正相关还是负相关
head(state.x77)
cor(state.x77)
# cov()函数:计算协方差，用来衡量两个变量的整体误差
x <- state.x77[,c(1,2,3,6)]
y <- state.x77[,c(4,5)]
cor(x, y)
cov(x, y)
# ggm中的pcor()函数可以计算偏相关系数
colnames(state.x77)
#install.packages('ggm')
library('ggm')
# pcor()两个重要参数：第一个是数值向量（前两个数值表示要计算相关系数的下标，其余的数值为条件变量的下标），第二个参数是cov()函数计算出来的协方差
pcor(c(1,5,2,3,6), cov(state.x77))


# 相关性检验函数：在进行相关性分析之后，对相关性进行检验，cor.test()函数
# cor.test()函数四个重要的参数：x、y需要检测的相关性变量；alternative用来指定双侧检验还是单侧检验
# two.sided代表分别检测正负性，greater正相关，less负相关；method选项用于指定用那种相关系数，pearson、spearman、kendall
# 置信区间：confidence interval，是指样本统计量所构造的总体参数的估计区间，
#在统计学，一个概率样本的置信区间是对这个样本的某个总体参数的区间估计，
cor.test(state.x77[,3], state.x77[,5])
#install.packages('psych')
library('psych')
corr.test(state.x77)
# 偏相关性细数的检验，pcor.test()
x <- pcor(c(1,5,2,3,6), cov(state.x77))
# pcor()三个参数：第一个参数偏相关性系数、第二个是控制的变量数，第三个是样本数
pcor.test(x, 3, 50)
library('MASS')
head(UScrime)
t.test(Prob~So, data = UScrime)
